package com.health.trans.annotation;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.health.trans.pojo.TransParam;
import com.health.trans.service.BatchTransService;
import com.health.trans.util.DataSourceUtil;
import lombok.extern.slf4j.Slf4j;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

/**
 * @author nqlz
 */
@Slf4j
public class TransHandler extends BaseHandler implements ConstraintValidator<TransValid, TransParam> {
    private static final List<String> DATA_BASES = Arrays.asList("platform_standard", "platform_basic", "platform_index");

    public static boolean validDataBases(String dataBase) {
        return DATA_BASES.contains(dataBase);
    }

    @Override
    public boolean isValid(TransParam value, ConstraintValidatorContext context) {
        //禁用默认的message的值
        context.disableDefaultConstraintViolation();

        //校验tables
        //if (CollUtil.isEmpty(value.getTables()) && !value.isAllBase()) {
        //    return errMsg("非全库表发送则tables不能为空", context);
        //}
        //
        //if (StrUtil.isNotBlank(value.getDataBaseName())) {
        //    if (!validDataBases(value.getDataBaseName())) {
        //        return errMsg("数据库名称有误", context);
        //    }
        //}
        //
        ////校验 总数和分页数量
        //if (!value.validTotalCount()) {
        //    return errMsg("总数应大于分页数量。", context);
        //}
        //
        ////读写数据源都有时，校验数据源
        //if (value.dsAllNotNull()) {
        //    return value.checkAllDatasource(context);
        //}
        //
        //if ( StrUtil.isBlank(value.getGlobalReadResource())) {
        //    return errMsg("全局读库 则读数据源不能为空。", context);
        //}
        //if ( StrUtil.isBlank(value.getGlobalWriterResource())) {
        //    return errMsg("全局写库 则写数据源不能为空。", context);
        //}
        //
        //
        ////若未指定读写源，则默认全局读写库
        //try {
        //    value.getTables().forEach(i -> {
        //        //非全局，校验读写数据源，发往Es or kafka 跳过写数据源校验
        //        if (!value.isGlobalRead() && StrUtil.isBlank(i.getReadResource())) {
        //            throwException(context, " 读数据源不能为空。");
        //        }
        //        if (!value.isGlobalWrite() && StrUtil.isBlank(i.getWriterResource()) && !TransType.isMySqlToEsOrKafka(transType)) {
        //            throwException(context, " 写数据源不能为空。");
        //        }
        //
        //        //发送类型为Es或kafka时，且为全局读库时，校验读数据源
        //        if (value.isGlobalRead() && TransType.isMySqlToEsOrKafka(transType)) {
        //            if (StrUtil.isBlank(value.getGlobalReadResource()) && StrUtil.isBlank(i.getReadResource())) {
        //                throwException(context, "发送方式为" + transType + "时，读数据源不能为空。");
        //            }
        //            if (!DataSourceUtil.isExist(i.getReadResource())) {
        //                log.info(JSONUtil.toJsonStr(DataSourceUtil.DS_MAP));
        //                throwException(context, i.getReadResource() + " 读数据源错误。");
        //            }
        //        }
        //        //发送Es 或 kafka 时 写表Name 处理
        //        if (TransType.isMySqlToEsOrKafka(transType) && (StrUtil.isBlank(i.getWriteTableName()))) {
        //            i.setWriteTableName(i.getReadTableName());
        //        }
        //
        //    });
        //} catch (Exception e) {
        //    return false;
        //}

        return true;
    }

}
